package org.lcc.Service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.lcc.model.dto.CertificateTemplateDTO;
import org.lcc.model.dto.CertificateIssuanceDTO;
import org.lcc.model.dto.ExamDto;

import java.util.List;
import java.util.Map;

public interface DashboardService {
    
    /**
     * 获取系统概览数据
     * @return 系统概览数据
     */
    Map<String, Object> getSystemOverview();
    
    /**
     * 保存证书模板
     * @param templateDTO 证书模板DTO
     * @throws Exception 异常
     */
    void saveCertificateTemplate(CertificateTemplateDTO templateDTO) throws Exception;
    
    /**
     * 获取用户创建的证书模板列表
     * @param creatorId 创建者ID
     * @return 证书模板列表
     * @throws Exception 异常
     */
    List<CertificateTemplateDTO> getTemplatesByCreator(String creatorId) throws Exception;
    
    /**
     * 删除证书模板
     * @param templateId 模板ID
     * @throws Exception 异常
     */
    void deleteTemplate(Integer templateId) throws Exception;
    
    /**
     * 生成证书模板预览图
     * @param templateId 模板ID
     * @return 预览图字节数组
     * @throws Exception 异常
     */
    byte[] generateTemplatePreview(Integer templateId) throws Exception;
    
    /**
     * 获取已结束的考试列表
     * @param schoolNumber 学校编号
     * @param current 当前页
     * @param size 每页大小
     * @return 考试列表分页数据
     */
    IPage<ExamDto> getFinishedExams(String schoolNumber, Integer current, Integer size);
    
    /**
     * 获取考试详情
     * @param examId 考试ID
     * @return 考试详情
     */
    ExamDto getExamDetail(Integer examId);
    
    /**
     * 颁发证书
     * @param issuanceDTO 证书颁发DTO
     * @return 已颁发的证书列表
     * @throws Exception 异常
     */
    List<Map<String, Object>> issueCertificates(CertificateIssuanceDTO issuanceDTO) throws Exception;
    
    /**
     * 预览证书颁发
     * @param issuanceDTO 证书颁发DTO
     * @return 预览数据列表
     * @throws Exception 异常
     */
    List<Map<String, Object>> previewCertificateIssuance(CertificateIssuanceDTO issuanceDTO) throws Exception;
    
    /**
     * 获取学生证书列表
     * @param studentId 学生ID
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param keyword 搜索关键词
     * @return 证书列表分页数据
     * @throws Exception 异常
     */
    IPage<Map<String, Object>> getStudentCertificates(String studentId, Integer pageNum, Integer pageSize, String keyword) throws Exception;
}